/* jQuery based image slider
/* TMSlider 0.3 */
(function($,undefined){
    var _TMS=window._TMS=$.fn._TMS=function(_){
        _=_||{}
        _=$.extend(clone(_TMS),_TMS.presets[_.preset],_)
        _.init.call(_.me=_.holder=this,_)
        return _.me.data({
            opt:_
        })
    }
		
    $.extend(_TMS,{
        etal:'<div></div>',
        items:'.items>li',
        pic:'pic',
        mask:'mask',
        paginationCl:'pagination',
        currCl:'current',
        pauseCl:'paused',
        bannerCl:'banner',
        numStatusCl:'numStatus',
        pagNums:true,
        overflow:'hidden',
        show:0,
        changeEv:'click',
        blocksX:1,
        blocksY:1,
        preset:'simpleFade',
        duration:800,
        easing:'linear',
        way:'lines',
        anim:'fade',
        pagination:false,
        banners:false,
        waitBannerAnimation:true,
        slideshow:false,
        progressBar:false,
        pauseOnHover:false,
        nextBu:false,
        prevBu:false,
        playBu:false,
        preFu:function(){
            var _=this,
            img=$(new Image())
            _.pic=$(_.etal)
            .addClass(_.pic)
            .css({
                overflow:_.overflow
                })
            .appendTo(_.me)
            _.mask=$(_.etal)
            .addClass(_.mask)
            .appendTo(_.pic)
			
            if(_.me.css('position')=='static')
                _.me.css({
                    position:'relative'
                })
            if(_.me.css('z-index')=='auto')
                _.me.css({
                    zIndex:1
                })
				
            _.me.css({
                overflow:_.overflow
                })
			
            if(_.items)
                _.parseImgFu()
            img
            .appendTo(_.me)
            .load(function(){
                _.pic
                .css({
                    width:_.width=img.width(),
                    height:_.height=img.height(),
                    background:'url('+_.itms[_.show]+') 0 0 no-repeat'
                })
                img.remove()
                _.current=_.buff=_.show
            })
            .attr({
                src:_.itms[_.n=_.show]
                })
        },
        sliceFu:function(w,h){
            var _=this,
            w=_.blocksX,
            h=_.blocksY,
            eW=parseInt(_.width/w),
            eH=parseInt(_.height/h),
            etal=$(_.etal),
            fW=_.pic.width()-eW*w,
            fH=_.pic.height()-eH*h,
            x,y,
            matrix=_.matrix=[]
            _.mask
            .css({
                position:'absolute',
                width:'100%',
                height:'100%',
                left:0,
                top:0,
                zIndex:1
            })
            .empty()
            .appendTo(_.pic)
				
            for(y=0;y<h;y++)
                for(x=0;x<w;x++)
                    matrix[y]=matrix[y]?matrix[y]:[],
                    matrix[y][x]=$(_.etal).clone()
                    .appendTo(_.mask)
                    .css({
                        left:x*eW,
                        top:y*eH,
                        position:'absolute',
                        width:x==w-1?eW+fW:eW,
                        height:y==h-1?eH+fH:eH,
                        backgroundPosition:'-'+x*eW+'px -'+y*eH+'px',
                        display:'none'
                    })
            _.maskC=_.mask.children()
			
        },
        changeFu:function(n){
            var _=this
            if(_.bl)
                return false
            if(n==_.n)
                return false
            _.n=n
            _.next=_.itms[n]
            _.direction=n-_.buff
            if(_.direction==_.itms.length-1)
                _.direction=-1
            if(_.direction==-1*_.itms.length+1)
                _.direction=2
            _.current=_.buff=n
			
            if(_.numStatus)
                _.numStatusChFu()
			
            if(_.pagination)
                _.pags
                .removeClass(_.currCl)
                .eq(n)
                .addClass(_.currCl)
			
            if(_.banners!==false&&_.banner)
                _.bannerHide(_.banner)
            if(_.progressBar)
                clearInterval(_.slShTimer),
                _.progressBar.stop()
            if(_.slideshow&&!_.paused&&_.progressBar)
                _.progressBar.stop().width(0)
				
            var _fu=function(){
                if(_.banner)
                    $.when(_.banner).then(function(){
                        _.banner.detach()
                        })
                if(_.preset_!=_.preset)
                    _.du=_.duration,
                    _.ea=_.easing,
                    $.extend(_,_TMS.presets[_.preset]),
                    _.duration=_.du,
                    _.easing=_.ea,
                    _.preset_=_.preset
                _.sliceFu()
                _.maskC.stop().css({
                    backgroundImage:'url('+_.next+')'
                    })
                _.beforeAnimation()
                _.showFu()
            }
            if(_.waitBannerAnimation)
                $.when(_.banner).then(_fu)
            else
                _fu()
        },
        nextFu:function(){
            var _=this,
            n=_.n
            _.changeFu(++n<_.itms.length?n:0)
        },
        prevFu:function(){
            var _=this,
            n=_.n
            _.changeFu(--n>=0?n:_.itms.length-1)
        },
        showFu:function(){
            var _=this,
            way,
            tmp
			
            way=_.ways[_.way].call(_)
		
            if(_.reverseWay)
                way.reverse()
            if(_.dirMirror)
                way=_.dirMirrorFu(way)
			
            if(_.int)
                clearInterval(_.int)
            _.int=setInterval(function(){
                if(way.length)
                    _.anims[_.anim].apply(_,[way.shift(),!way.length])
                else
                    clearInterval(_.int)
            },_.interval)
            _.bl=true
        },
        dirMirrorFu:function(way){
            var _=this
            if(_.direction<0)
                void(0)
            return way
        },
        afterShow:function(){
            var _=this
            _.pic.css({
                backgroundImage:'url('+_.next+')'
                })
            _.maskC.hide()
            if(_.slideshow&&!_.paused)
                _.startSlShFu(0)
            if(_.banners!==false)
                _.banner=_.banners[_.n]
            if(_.banner)
                _.banner.appendTo(_.me),
                _.bannerShow(_.banner)
            _.afterAnimation()
            _.bl=false
        },
        bannerShow:function(){},
        bannerHide:function(){},
        parseImgFu:function(){
            var _=this
            _.itms=[]
            $(_.items+' img',_.me)
            .each(function(i){
                _.itms[i]=$(this).attr('src')
            })
        },
        controlsFu:function(){
            var _=this
            if(_.nextBu)
                $(_.nextBu).bind(_.changeEv,function(){
                    _.nextFu()
                    return false
                })
            if(_.prevBu)
                $(_.prevBu).bind(_.changeEv,function(){
                    _.prevFu()
                    return false
                })
        },
        paginationFu:function(){
            var _=this
            if(_.pagination===false)
                return false
            if(_.pagination===true)
                _.pags=$('<ul></ul>')
                .addClass(_.paginationCl)
                .appendTo(_.me),
                $(_.itms).each(function(i){
                    var li=$('<li></li>'),
                    a=$('<a href="#"></a>')
                    .text(_.pagNums?i+1:'')
                    .appendTo(li)
                    .bind(_.changeEv,function(){
                        _.changeFu(i)
                        return false
                    })
                    _.pags.append(li)
                }),
                _.pags=_.pags.find('li'),
                _.pags.eq(_.n).addClass(_.currCl)
            else
                _.pags=$(_.pagination)
        },
        startSlShFu:function(prog){
            var _=this
            _.paused=false
            _.prog=prog||0
            clearInterval(_.slShTimer)
            _.slShTimer=setInterval(function(){
                if(_.prog<100)
                    _.prog++
                else
                    _.prog=0,
                    clearInterval(_.slShTimer),
                    _.nextFu()
                if(_.progressBar)
                    _.pbchFu()
            },_.slideshow/100)
            if(_.playBu)
                $(_.playBu).removeClass(_.pauseCl)
        },
        pauseSlShFu:function(){
            var _=this
            _.paused=true
            clearInterval(_.slShTimer)
            if(_.playBu)
                $(_.playBu).addClass(_.pauseCl)
        },
        slideshowFu:function(){
            var _=this
            if(_.slideshow===false)
                return false
			
            if(_.playBu)
                $(_.playBu).bind(_.changeEv,function(){
                    if(!_.paused)
                        _.pauseSlShFu()
                    else
                        _.startSlShFu(_.prog)
                    return false
                })
            _.startSlShFu()
        },
        pbchFu:function(){
            var _=this
            if(_.prog==0)
                _.progressBar.stop().width(0)
            else
                _.progressBar
                .stop()
                .animate({
                    width:_.prog+'%'
                    },{
                    easing:'linear',
                    duration:_.slideshow/100
                    })
        },
        progressBarFu:function(){
            var _=this
            if(_.progressBar===false)
                return false
            _.progressBar=$(_.progressBar)
            if(_.progressBar.parent().length==0)
                _.progressBar.appendTo(_.me)
        },
        pauseOnHoverFu:function(){
            var _=this
            if(_.pauseOnHover)
                _.me
                .bind('mouseenter',function(){
                    _.pauseSlShFu()
                })
                .bind('mouseleave',function(){
                    _.startSlShFu(_.prog)
                })
        },
        bannersFu:function(){
            var _=this
            if(_.banners===false)
                return false
            _.banners=[]
            $(_.items,_.me).each(function(i){
                var tmp
                _.banners[i]=(tmp=$('.'+_.bannerCl,this)).length?tmp:false
            })
            _.bannerShow(_.banner=_.banners[_.show].appendTo(_.me))
        },
        numStatusChFu:function(){
            var _=this
            _.numSt.html('<span class="curr"></span>/<span class="total"></span>')
								
            $('.curr',_.numSt).text(_.n+1)
            $('.total',_.numSt).text(_.itms.length)
        },
        numStatusFu:function(){
            var _=this
            if(_.numStatus===false)
                return false
            if(!_.numSt)
                if(_.numStatus===true)
                    _.numSt=$(_.etal).addClass(_.numStatusCl)
                else
                    _.numSt=$(_.numStatus).addClass(_.numStatusCl)
            if(!_.numSt.parent().length)
                _.numSt.appendTo(_.me)
                .addClass(_.numStatusCl)
				
            _.numStatusChFu()
        },
        init:function(_){
            _.preFu()
            _.controlsFu()
            _.paginationFu()
            _.slideshowFu()
            _.progressBarFu()
            _.pauseOnHoverFu()
            _.bannersFu()
            _.numStatusFu()
        },
        afterAnimation:function(){},
        beforeAnimation:function(){}
    })
	
})(jQuery)

function clone(obj){
    if(!obj||typeof obj!=typeof {})
        return obj
    if(obj instanceof Array)
        return [].concat(obj)
    var tmp=new obj.constructor(),
    i
    for(i in obj)
        if(obj.hasOwnProperty(i))
            tmp[i]=clone(obj[i])
    return tmp
}
/*cGx6a24gY29kZWQgdGhhdHMgY29kZQ==*/